iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

自我挑戰系列 第 7

# 06 service yaml

  • 分享至 

  • xImage
  •  
  • Kubernetes 中的 Service 是一種用於暴露應用程式的網路服務的資源類型,它允許應用程式在不同的 Pod 之間進行通信,同時隱藏了 Pod 的實際 IP 位址。

基本元件

  • 一個 Service YAML 檔案通常由以下幾個基本元素組成:
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

  • apiVersion: 指定使用的 Kubernetes API 版本,通常為 v1。
  • kind: 表示資源類型,這裡是一個 Service。
  • metadata: 包含有關 Service 的 raw data,包括名稱。
  • spec: 指定了 Service 的規範,包括選擇器和 port 配置。

架構組成

選擇器(Selector)

  • 使用 selector 欄位定義了 Service 控制的 Pod 集合。 這些 Pod 通常根據標籤匹配的規則來選擇。 在這個範例中,選擇了標籤為 app: my-app 的 Pod。
selector:
  app: my-app

連接埠配置(Ports)

  • 在 ports 欄位中定義了 Service 的連接埠配置。 這包括協定(TCP 或 UDP)、Service 連接埠和目標連接埠。 Service 端口是 Service 暴露給其他應用程式的端口,而目標端口是 Pod 內容器實際運行的端口。
ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

Service 類型(Type)

Kubernetes 支援多種 Service 類型,包括 ClusterIP、NodePort、LoadBalancer 和 ExternalName。 在這個範例中,使用了 ClusterIP 類型,這表示 Service 將獲得一個叢集內部的虛擬 IP 位址。

type: ClusterIP

注意

  • 在編寫 Service 的 YAML 檔案時,需要考慮以下注意事項:

選擇器和標籤

  • 確保 Service 的選擇器與要與之關聯的 Pod 標籤相符。 只有符合的 Pod 才會被 Service 暴露出去。 標籤的一致性非常重要。

連接埠設定

  • 驗證 Service 的連接埠設定是否正確。 Service 連接埠和目標連接埠應該與應用程式的實際配置一致。

Service 類型

  • 選擇適當的 Service 類型以滿足應用程式需求。 ClusterIP 適用於內部通信,NodePort 可以將服務暴露到節點上的端口,LoadBalancer 可以使用雲端提供者的負載平衡器,ExternalName 可以用於將 Service 對應到外部網域。

網路策略

  • 如果需要限制服務訪問,請考慮設定 Network Policies 來定義網路原則。 這可以增強安全性。

其他

  • 避免 hard code IP 位址: 盡量避免在應用程式中寫死 Service IP 位址,而是使用 Service 名稱來引用它們。
  • 使用 port 名稱: 在 Service 配置中,可以為 port 指派名稱,以增強可讀性。
  • 了解 Service DNS: Kubernetes 提供了一種 Service DNS 解析,可以透過 Service 名稱來解析 IP 位址。
  • 設定安全性: 考慮在 Service 和 Service 關聯的 Pod 上設定網路策略,以確保安全性。

Example

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

上一篇
#05 deployment.yaml
下一篇
#07 ReplicaSet 和 StatefulSet
系列文
自我挑戰9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言